package com.cykj.eurekaclient.utils.wx_code;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class WXTool {
    public static Map<String,Object> getWXInfoByCode(String code) {
        String url = "https://api.weixin.qq.com/sns/jscode2session";
        url += "?appid=wx0c6a1e34a4677e84";//自己的appid
        url += "&secret=02891bcc2d30dc1eb006500ee4481084";//自己的appSecret
        url += "&js_code=" + code;
        url += "&grant_type=authorization_code";
        url += "&connect_redirect=1";
        String res = null;
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        // DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);    //GET方式
        CloseableHttpResponse response = null;
        // 配置信息
        RequestConfig requestConfig = RequestConfig.custom()          // 设置连接超时时间(单位毫秒)
                .setConnectTimeout(5000)                    // 设置请求超时时间(单位毫秒)
                .setConnectionRequestTimeout(5000)             // socket读写超时时间(单位毫秒)
                .setSocketTimeout(5000)                    // 设置是否允许重定向(默认为true)
                .setRedirectsEnabled(false).build();           // 将上面的配置信息 运用到这个Get请求里
        httpget.setConfig(requestConfig);                         // 由客户端执行(发送)Get请求
        try {
            response = httpClient.execute(httpget);
            HttpEntity responseEntity = response.getEntity();
            System.out.println("响应状态为:" + response.getStatusLine());
            if (responseEntity != null) {
                res = EntityUtils.toString(responseEntity);
                System.out.println("响应内容长度为:" + responseEntity.getContentLength());
                System.out.println("响应内容为:" + res);
            }
            // 释放资源
            if (httpClient != null) {
                httpClient.close();
            }
            if (response != null) {
                response.close();
            }// 从响应模型中获取响应实体
        } catch (IOException e) {
            e.printStackTrace();
        }
        JSONObject jo = JSON.parseObject(res);
        String openId = jo.getString("openid");
        String sessionKey = jo.getString("session_key");
        String unionId = jo.getString("unionid");

        Map<String,Object> map = new HashMap<>();
        map.put("openId",openId);
        map.put("sessionKey",sessionKey);
        map.put("unionId",unionId);
        return  map;
    }
}
